﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Comissoes.Utilities;

namespace Comissoes.Models
{
    public class UnidadesModel
    {
        public UNIDADES unidade { get; set; }
        xcontEntities db = new xcontEntities();
        List<string> erros;

        public UnidadesModel()
        {
            UNIDADES unidade = new UNIDADES();

            this.unidade = unidade;
        }

        public UnidadesModel(Int32? id)
        {
            this.unidade = db.UNIDADES.FirstOrDefault(t => t.ID_UNID == id);
        }

        public List<string> UpdateValidate(FormCollection form)
        {
            this.erros = new List<string>();

            String COD_UNID = form["COD_UNID"], DESC_UNID = form["DESC_UNID"];

            if (string.IsNullOrEmpty(COD_UNID))
                erros.Add("É necessário informar o código da unidade.");

            else if (db.UNIDADES.Any(t => t.COD_UNID == COD_UNID && t.ID_UNID != this.unidade.ID_UNID))
                erros.Add("Já existe uma unidade cadastrada com este código no momento.");

            if (string.IsNullOrEmpty(form["DESC_UNID"]))
                erros.Add("É necessário informar a descrição da unidade.");

            else if (db.UNIDADES.Any(t => t.DESC_UNID == DESC_UNID && t.ID_UNID != this.unidade.ID_UNID))
                erros.Add("Já existe uma unidade cadastrada com esta descrição no momento.");

            return erros;
        }

        public List<string> Update(FormCollection form)
        {
            this.erros = new List<string>();

            try
            {
                if (db.UNIDADES.Any(t => t.ID_UNID == this.unidade.ID_UNID))
                    this.unidade = db.UNIDADES.FirstOrDefault(t => t.ID_UNID == this.unidade.ID_UNID);

                else
                    db.AddToUNIDADES(this.unidade);

                this.unidade.COD_UNID = form["COD_UNID"];
                this.unidade.DESC_UNID = form["DESC_UNID"];

                db.SaveChanges();
            }
            catch (Exception ex)
            {
                erros.Add(ex.Message);
                if (ex.InnerException != null)
                    erros.Add(ex.InnerException.Message);
            }

            return erros;
        }

        public List<string> Delete()
        {
            this.erros = new List<string>();

            if (db.PRODUTOS.Include("UNIDADES").Any(t => t.UNIDADES.ID_UNID == this.unidade.ID_UNID))
                erros.Add("Existem produtos cadastrados com esta unidade no momento.");

            if (!erros.Any())
            {
                try
                {
                    db.DeleteObject(db.UNIDADES.FirstOrDefault(t => t.ID_UNID == this.unidade.ID_UNID));
                    db.SaveChanges();
                }
                catch (Exception ex)
                {
                    erros.Add(ex.Message);
                }
            }

            return erros;
        }
    }
}
